﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using GAIA_Logica;

namespace GAIA_IU
{
    public partial class act_terrenos : System.Web.UI.Page
    {
        private List<Terreno> listaTerrenos = new List<Terreno>();
        private Terreno terreno = new Terreno();
        GAIA_Logica.Localidad localidad = new Localidad();
        List<GAIA_Logica.Localidad> listaLocalidades;
        List<GAIA_Logica.Localidad> listaLocalidadesCanton;
        List<GAIA_Logica.Localidad> listaLocalidadesDistrito;

        protected void Page_Load(object sender, EventArgs e)
        {

            bool login = Session["login"] != null ? Boolean.Parse(Session["login"].ToString()) : false;

            if (login)
            {
                if (IsPostBack)
                {

                }
                else
                {
                    listaLocalidades = localidad.getAllProvincias();
                    cargarProvincias();
                    listaLocalidadesCanton = localidad.getCantonesPro(1);
                    cargarCantones();
                    listaLocalidadesDistrito = localidad.getDistritosCanton(101);
                    cargarDistritos();
                }
            }
            else {
                Response.Redirect("Login.aspx");
            }
        }

        protected void cargarProvincias()
        {

            list_Provincia.DataSource = listaLocalidades;
            list_Provincia.DataBind();
            //Session["ListaDeClientes"] = listaClientes;
        }

        protected void cargarCantones()
        {

            list_Canton.DataSource = listaLocalidadesCanton;
            list_Canton.DataBind();
            //Session["ListaDeClientes"] = listaClientes;
        }

        protected void cargarDistritos()
        {

            list_Distrito.DataSource = listaLocalidadesDistrito;
            list_Distrito.DataBind();
            //Session["ListaDeClientes"] = listaClientes;
        }

        protected void list_Provincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            listaLocalidadesCanton = localidad.getCantonesPro(int.Parse(list_Provincia.SelectedValue));
            cargarCantones();
            listaLocalidadesDistrito = localidad.getDistritosCanton(listaLocalidadesCanton[0].IdCanton);
            cargarDistritos();
        }

        protected void list_Canton_SelectedIndexChanged(object sender, EventArgs e)
        {
            listaLocalidadesDistrito = localidad.getDistritosCanton(int.Parse(list_Canton.SelectedValue));
            cargarDistritos();
        }

        protected void btn_busqueda_Click(object sender, EventArgs e)
        {
            string param_option = tipo_busqueda.SelectedValue;
            string param = txt_busqueda.Text;
            Terreno terrenoTemp = new Terreno(); ;
            try
            {
                switch (param_option)
                {
                    case "nombre":
                        listaTerrenos = terrenoTemp.buscarXNombre(param);
                        break;
                    case "id":
                        terrenoTemp.getTerreno(int.Parse(param));
                        listaTerrenos.Add(terrenoTemp);
                        break;
                }
                cargarDatos();
                GridView_Parcelas.DataSource = null;
                GridView_Parcelas.DataBind();
                GridView_Parcelas.CssClass = "unloaded";



            }
            catch (Exception ex)
            {
                Avisar("Error al buscar al cliente. Por favor intente nuevamente. (" + ex.Message + ")", false);
            }

        }

        protected void Avisar(string aviso, bool resultado)
        {
            aviso_label.Text = aviso;
            if (resultado)
            {
                aviso_label.CssClass = "_true";
            }
            else
            {
                aviso_label.CssClass = "_false";
            }

        }

        protected void ClearForm()
        {
            txt_busqueda.Text = "";
            txt_nombre.Text = "";
            txt_tamano.Text = "";
            GridView_Terrenos.DataSource = null;
            GridView_Terrenos.DataBind();
            //
            GridView_Parcelas.DataSource = null;
            GridView_Parcelas.DataBind();
            GridView_Parcelas.CssClass = "unloaded";
        }

        protected void cargarDatos()
        {

            GridView_Terrenos.DataSource = listaTerrenos;
            GridView_Terrenos.DataBind();
            Session["ListaDeTerrenos"] = listaTerrenos;
        }

        protected void gridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView_Terrenos.DataSource = (List<Terreno>)Session["ListaDeTerrenos"];
            GridView_Terrenos.PageIndex = e.NewPageIndex;
            GridView_Terrenos.DataBind();
        }

        protected void btn_salvar_Click(object sender, EventArgs e)
        {
            string ingresarParcelas = Request["check_parcelas"];
            
            int id_terreno = (Int32)GridView_Terrenos.SelectedDataKey.Values["Id"];
            string _str_tamano = txt_tamano.Text;
            string _tamano = _str_tamano.Replace(".", ",");
            float tamano = float.Parse(_tamano);           
            try
            {
                terreno = new Terreno();
                terreno.getTerreno(id_terreno);
                terreno.Tamano = tamano;
                terreno.Nombre = txt_nombre.Text;
                terreno.TipoTerreno = "N/A";
                terreno.Localidad.IdDistrito = int.Parse(list_Distrito.SelectedValue);
                terreno.actualizarTerreno();
                if (ingresarParcelas == "on")
                {
                    insertarParcelas(terreno.Id);
                }
                ClearForm();

                Avisar("El terreno " + terreno.Nombre + " ha sido actualizado.", true);

            }
            catch (Exception ex)
            {
                Avisar("Error al actualizar. Por favor intente nuevamente :(" + ex.Message + ")", false);
            }
            
        }

        protected bool insertarParcelas(int id_terreno)
        {
            bool result = false;
            //List<GAIA_Logica.Segmento> listaSegmentos;
            GAIA_Logica.Segmento tempSegmento;
            int cant_parcelas = int.Parse(Request["cant_parcelas"]);
            try
            {
                for (int x = 0; x < cant_parcelas; x++)
                {
                    string parce_nombre = Request["parcelas[" + x + "].nombre"];
                    string _request_parce_tamano = Request["parcelas[" + x + "].tamano"];

                    string _parce_tamano = _request_parce_tamano.Replace(".", ",");
                    float parce_tamano = float.Parse(_parce_tamano);

                    tempSegmento = new Segmento(parce_tamano, parce_nombre, id_terreno);
                    result = tempSegmento.ingresarSegmento();
                }
            }
            catch (Exception ex)
            {
                Avisar("Error al ingresar las parcelas. Por favor intente nuevamente :(" + ex.Message + ")", false);
                result = false;
            }
            return result;
        }

        protected void GridView_Terrenos_SelectedIndexChanged(object sender, EventArgs e)
        {
            int id_terreno = (Int32)GridView_Terrenos.SelectedDataKey.Values["Id"];
            string nombre_terreno = (String)GridView_Terrenos.SelectedDataKey.Values["Nombre"];            
            txt_nombre.Text = nombre_terreno;
            txt_tamano.Text = (Double)GridView_Terrenos.SelectedDataKey.Values["Tamano"]+"";

            string tipoTerreno = (String)GridView_Terrenos.SelectedDataKey.Values["TipoTerreno"]; 
            DropDownListTipoZona.SelectedIndex = tipoTerreno == "No Bosque" ? 1 : 0;
            /*Obtiene terreno*/
            Terreno objTerreno = new Terreno();
            objTerreno.getTerreno(id_terreno);
            list_Provincia.SelectedValue = objTerreno.Localidad.IdProvincia+"";
            listaLocalidadesCanton = localidad.getCantonesPro(objTerreno.Localidad.IdProvincia);
            cargarCantones();
            list_Canton.SelectedValue = objTerreno.Localidad.IdCanton + "";
            listaLocalidadesDistrito = localidad.getDistritosCanton(objTerreno.Localidad.IdCanton);
            cargarDistritos();
            list_Distrito.SelectedValue = objTerreno.Localidad.IdDistrito + "";

            /*Obtiene las parcelas del terreno*/
            List<Segmento> listaParcelas = new List<Segmento>();
            Segmento tmp_parcela = new Segmento();
            listaParcelas = tmp_parcela.getListaSegmentosTerreno(id_terreno);
            GridView_Parcelas.DataSource = listaParcelas;
            GridView_Parcelas.DataBind();
        }
    }
}